<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
	<title>映射和分析 | Elasticsearch: 权威指南 | Elastic</title>
    <!-- Give IE8 a fighting chance -->
    <!--[if lt IE 9]>
    <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
	<link rel="stylesheet" type="text/css" href="../static/styles.css" />
</head>
<body>
<div class="main-container">
    <section id="content">
        
        <div class="content-wrapper">
            <section id="guide" lang="zh_cn">
                <div class="container">
                    <div class="row">
                        <div class="col-xs-12 col-sm-8 col-md-8 guide-section">
                            <div style="color:gray; word-break: break-all; font-size:12px;">原文地址: <a href="https://www.elastic.co/guide/cn/elasticsearch/guide/current/mapping-analysis.html" rel="nofollow">https://www.elastic.co/guide/cn/elasticsearch/guide/current/mapping-analysis.html</a>, 版权归 www.elastic.co 所有<br/>
                            英文版地址: <a href="https://www.elastic.co/guide/en/elasticsearch/guide/current/mapping-analysis.html" rel="nofollow">https://www.elastic.co/guide/en/elasticsearch/guide/current/mapping-analysis.html</a>
                            </div>
                        <!-- start body -->
                  <div class="page_header">
<b>请注意:</b><br>本书基于 Elasticsearch 2.x 版本，有些内容可能已经过时。
</div>
<div id="content">
<div class="breadcrumbs">
<span class="breadcrumb-link"><a href="index.html">Elasticsearch: 权威指南</a></span>
»
<span class="breadcrumb-link"><a href="getting-started.html">基础入门</a></span>
»
<span class="breadcrumb-node">映射和分析</span>
</div>
<div class="navheader">
<span class="prev">
<a href="search-lite.html">« <em>轻量</em> 搜索</a>
</span>
<span class="next">
<a href="_exact_values_versus_full_text.html">精确值 VS 全文 »</a>
</span>
</div>
<div class="chapter">
<div class="titlepage"><div><div>
<h2 class="title">
<a id="mapping-analysis"></a>映射和分析<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elasticsearch-cn/elasticsearch-definitive-guide/edit/cn/052_Mapping_Analysis/25_Data_type_differences.asciidoc">edit</a>
</h2>
</div></div></div>
<p>当摆弄索引里面的数据时，我们发现一些奇怪的事情。一些事情看起来被打乱了：在我们的索引中有12条推文，其中只有一条包含日期 <code class="literal">2014-09-15</code> ，但是看一看下面查询命中的 <code class="literal">总数</code> （total）：</p>
<div class="pre_wrapper lang-sense">
<pre class="programlisting prettyprint lang-sense">GET /_search?q=2014              # 12 results
GET /_search?q=2014-09-15        # 12 results !
GET /_search?q=date:2014-09-15   # 1  result
GET /_search?q=date:2014         # 0  results !</pre>
</div>
<div class="sense_widget" data-snippet="snippets/052_Mapping_Analysis/25_Data_type_differences.json"></div>
<p>为什么在 <a class="xref" href="search-lite.html#all-field-intro" title="_all 字段"><code class="literal">_all</code> </a> 字段查询日期返回所有推文，而在 <code class="literal">date</code> 字段只查询年份却没有返回结果？为什么我们在 <code class="literal">_all</code> 字段和 <code class="literal">date</code> 字段的查询结果有差别？</p>
<p>推测起来，这是因为数据在 <code class="literal">_all</code> 字段与 <code class="literal">date</code> 字段的索引方式不同。所以，通过请求 <code class="literal">gb</code> 索引中 <code class="literal">tweet</code> 类型的<em>映射</em>（或模式定义），让我们看一看 Elasticsearch 是如何解释我们文档结构的：</p>
<div class="pre_wrapper lang-sense">
<pre class="programlisting prettyprint lang-sense">GET /gb/_mapping/tweet</pre>
</div>
<div class="sense_widget" data-snippet="snippets/052_Mapping_Analysis/25_Data_type_differences.json"></div>
<p>这将得到如下结果：</p>
<div class="pre_wrapper lang-js">
<pre class="programlisting prettyprint lang-js">{
   "gb": {
      "mappings": {
         "tweet": {
            "properties": {
               "date": {
                  "type": "date",
                  "format": "strict_date_optional_time||epoch_millis"
               },
               "name": {
                  "type": "string"
               },
               "tweet": {
                  "type": "string"
               },
               "user_id": {
                  "type": "long"
               }
            }
         }
      }
   }
}</pre>
</div>
<p>基于对字段类型的猜测， Elasticsearch 动态为我们产生了一个映射。这个响应告诉我们 <code class="literal">date</code> 字段被认为是 <code class="literal">date</code> 类型的。由于 <code class="literal">_all</code> 是默认字段，所以没有提及它。但是我们知道 <code class="literal">_all</code> 字段是 <code class="literal">string</code> 类型的。</p>
<p>所以 <code class="literal">date</code> 字段和 <code class="literal">string</code> 字段索引方式不同，因此搜索结果也不一样。这完全不令人吃惊。你可能会认为核心数据类型 strings、numbers、Booleans 和 dates 的索引方式有稍许不同。没错，他们确实稍有不同。</p>
<p>但是，到目前为止，最大的差异在于代表 <em>精确值</em> （它包括 <code class="literal">string</code> 字段）的字段和代表 <em>全文</em> 的字段。这个区别非常重要——它将搜索引擎和所有其他数据库区别开来。</p>





</div>
<div class="navfooter">
<span class="prev">
<a href="search-lite.html">« <em>轻量</em> 搜索</a>
</span>
<span class="next">
<a href="_exact_values_versus_full_text.html">精确值 VS 全文 »</a>
</span>
</div>
</div>

                  <!-- end body -->
                        </div>
                        <div class="col-xs-12 col-sm-4 col-md-4" id="right_col">
                        
                        </div>
                    </div>
                </div>
            </section>
        </div>
    </section>
</div>
<script src="../static/cn.js"></script>
</body>
</html>